JupyterでScheme処理系を動かしてSICPを勉強する
はじめに
最近社内でSICPの勉強会を行っています。
SICPでは、教材としてLISP処理系の一つであるschemeを採用しており、勉強する時にはschemeを動かしながら例題の動作確認や課題を行っていきます。
Emacs + Gaucheを用いて学習を進めていくパターンが多い印象ですが、Emacsに慣れていない人にとっては、まずEmacsの操作を満足にできるようになるまでに高いハードルがあります。
今回は、Emacsの代わりにJupyterを用いてScheme処理系を動かし、その動作を確認する方法を紹介します。
Jupyterについて
Jupyterとは、簡単にいってしまうとブラウザ上で動作するREPL環境 + メモ帳です。
以下の画面のように、コードをその場で実行し、その結果をその場で見ることができます。
また、コードの他にmarkdown形式で文章を追加することもできるので、コードと一緒にメモを残しておき、後から内容を振り返ることも簡単にできるようになります。
Jupyterは、もともとはIPython notebookという名前のプロジェクトであり、IPythonがベースとなっていましたが、今はKernelさえサーバ側に組み込まれていればPython以外にも様々な処理系を実行可能となっています。
今回はこのJupyterにCalystoと呼ばれるscheme処理系をKernelとして組み込み、Jupyter notebook上でschemeを動かせるようにします。
利用手順
今回は、以下の流れで環境のセットアップを行いました。前提としてpyenvがインストールされている必要があります。
$ pyenv install 3.4.3 $ pyenv global 3.4.3 $ pip install ipython $ pip install jupyter $ pip install calysto-scheme
Jupyterを動かすためには、適当な作業ディレクトリを作成後、jupyterを実行します。
$ mkdir note $ cd note $ jupyter notebook
実行するとブラウザが立ち上がり、ディレクトリ内の一覧が出てくるので、左上の「new」から「Calysto Scheme 3」を選択します。
あとは、コードブロックにコードを書いて、実行してみると結果が表示されます。
TIPS : githubでのnotebookの保管
ブラウザ上で作成したnotebookは、作業ディレクトリ上に*.ipynb
という拡張子で保存されます。
このnotebookをgithub上に上げると、実行結果も含めたnotebookをそのままgithubのwebページから確認できるようになります。
sicp/x115.ipynb at master · masuwo3/sicp
実際にgithub上でコードを実行することはできませんが、過去の振り返りには便利だと思います。
おわりに
昔に一度SICPを勉強していた時は、EmacsやGaucheの使い勝手などが原因で、なかなかしんどい思いをしていましたが、今回はJupyterのおかげで簡単にコーディングや実行ができそうです。
コードが複雑になったときにどこまで対応できるかわかりませんが、とりあえずはこの形で勉強を進めていこうと思います。